import os
import pandas as pd
from django.conf import settings
from myapp.models import ObservationRecord  # 确保模型名称匹配
from datetime import datetime


def import_latest_observation_data():
    # 获取数据文件目录
    data_dir = os.path.join(settings.BASE_DIR, 'myapp/db/')

    # 找到最新的xls文件
    latest_file = None
    latest_file_time = None

    for file_name in os.listdir(data_dir):
        if file_name.endswith('.xls'):
            file_path = os.path.join(data_dir, file_name)
            file_time = os.path.getmtime(file_path)  # 获取文件的最后修改时间

            # 判断是否为最新文件
            if latest_file is None or file_time > latest_file_time:
                latest_file = file_path
                latest_file_time = file_time

    # 检查是否找到文件
    if latest_file is None:
        print("未找到任何.xls文件")
        return

    print(f"导入文件: {latest_file}")

    # 读取最新的Excel文件
    df = pd.read_excel(latest_file, header=0, delim_whitespace=True, engine='xlrd')

    # 遍历每行数据并保存到数据库中
    for _, row in df.iterrows():
        # 提取日期并格式化
        observation_date = pd.to_datetime(row.get('日期', None), errors='coerce').date() if pd.notnull(
            row.get('日期', None)) else None

        # 检查日期是否存在，如果存在则跳过
        if observation_date and ObservationRecord.objects.filter(date=observation_date).exists():
            print(f"跳过已存在的数据: {observation_date}")
            continue

        # 创建ObservationRecord对象并填充字段
        observation_data = ObservationRecord(
            date=observation_date,
            data_status=row.get('是否有数据', 'N/A'),
            url=row.get('网址', ''),
            observation_date=observation_date,
            observer=row.get('观测人', '未知'),
            location=row.get('地点', '未知'),
            cloud_cover=row.get('云量', '未记录'),
            weather_condition=row.get('天气情况', '未记录'),
            altitude=int(row.get('海拔', 0)) if pd.notnull(row.get('海拔', None)) else 0,
            observation_time=row.get('观测时间', '未记录'),
            coordinates=row.get('经纬度', '未记录'),
            number=int(row.get('number', 0)) if pd.notnull(row.get('number', None)) else 0,
            details=row.get('信息', '无详细信息')
        )

        # 保存到数据库
        observation_data.save()
        print(f"导入数据: {observation_date}")

    print("数据导入完成！")
